﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.Data.SqlClient;

/// <summary>
/// Descripción breve de GestionMesas
/// </summary>
public class GestionMesas
{
    static ArrayList listaMesas = new ArrayList();
    static GestionMesas instance;
    public static GestionMesas getInstance()
    {
        if (instance == null)
        {
            instance = new GestionMesas();
        }
        return instance;
    }
    public ArrayList getMesas()
    {
        return listaMesas;
    }
    public ArrayList getMesas(String juego)
    {
        ArrayList l = new ArrayList();
        foreach (MesaBeans m in listaMesas)
        {
            if (m.getIdJuego().Equals(juego))
            {
                l.Add(m);
            }
        }
        return l;
    }

    public MesaBeans getMesa(String mesa)
    {
        foreach (MesaBeans m in listaMesas)
        {
            if (m.getIdMesa().Equals(mesa))
            {
                return m;
            }
        }
        return null;
    }

    

	private GestionMesas()
	{
	}
    /// <summary>
    /// Se crea un mesa que pertenece al juego que le pasamos en el id
    /// Se guarda en la lista de mesas y en la base de datos.
    /// </summary>
    /// <param name="idJuego">Id del juego al que va a perteneces la mesa</param>
    public void crearMesa(String idJuego)
    {
        MesaBeans mesa = new MesaBeans(idJuego);
        JuegoBeans j = GestionJuegos.getInstance().dameJuego(idJuego);
        listaMesas.Add(mesa);
    }

    public void cargarMesas()
    {
        String SQL = "SELECT IdMesa, IdJuego, FechaAlta, FechaBaja, SaldoMinimo FROM Mesa WHERE (FechaBaja IS NULL)";
        SqlConnection con = Conexion.getConexion();
        con.Open();
        String idJuego;
        String idMesa;
        MesaBeans m;
        
        try
        {
            SqlDataReader myReader = null;
            SqlCommand myCommand = new SqlCommand(SQL, con);
            myReader = myCommand.ExecuteReader();
            while(myReader.Read())
            {
                idMesa = myReader["IdMesa"].ToString();
                idJuego = myReader["IdJuego"].ToString();
                m = new MesaBeans(idJuego, idMesa);
                listaMesas.Add(m);
                
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        con.Close();
    }
    /// <summary>
    /// Borra la mesa que pasemos. Se supone que habría que pasar
    /// tambien un administrador.
    /// </summary>
    /// <param name="m">Mesa que se quiere borrar</param>
    public void borrarMesa(MesaBeans m)
    {
        listaMesas.Remove(m);
    }
    public String guardarMesa(MesaBeans m)
    {
        SqlConnection con = Conexion.getConexion();
        con.Open();
        String SQL = "INSERT INTO [casino].[dbo].[Mesa]" +
           "([idJuego]" +
           ",[FechaAlta])" +
     "VALUES" +
           "('" + m.getIdJuego() + "'" +
           ",'" + DateTime.Now.ToShortDateString() + "')";
          
        SqlCommand comando = new SqlCommand(SQL, con);
        int i = comando.ExecuteNonQuery();

        con.Close();
        return getUltimaMesa();
    }

    /// <summary>
    /// Devuelve el id de la ultima mesa que se ha creado.
    /// Es un poco chapu
    /// </summary>
    /// <returns>Id de la ultima mesa que se ha creado</returns>
    private String getUltimaMesa()
    {
        SqlConnection con = Conexion.getConexion();
        String resul = "";
        con.Open();
        try
        {
            SqlDataReader myReader = null;
            SqlCommand myCommand = new SqlCommand("select IdMesa from Mesa order by IdMesa DESC", con);
            myReader = myCommand.ExecuteReader();
            if (myReader.Read())
            {
                resul = myReader["IdMesa"].ToString();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
            return null;
        }
        con.Close();
        return resul;
    }

    public bool eliminarMesa(MesaBeans u)
    {
        if (u != null)
        {
            SqlConnection con = Conexion.getConexion();
            con.Open();
            String SQL = "UPDATE [casino].[dbo].[Mesa]" +
               " SET [FechaBaja]='" + DateTime.Now.ToShortDateString() + "'" +
               "WHERE IdMesa='" + u.getIdMesa() + "'";
            SqlCommand comando = new SqlCommand(SQL, con);

            comando.ExecuteNonQuery();
            con.Close();

        }
        else
        {
            return false;
        }
        return true;

    }
}
